博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转] Htmlspecialchars 和 mysql_real_escape_stringPHP 代码注射安全
阅读量:6117 次
发布时间:2019-06-21

本文共 1090 字,大约阅读时间需要 3 分钟。

转载自: 

1. 数据库的查询时,总是尝试,并使用准备的 parameterised 的查询。mysqli 和 PDO 库支持这。这是比使用逃逸的功能,如 mysql_real_escape_string 无限的安全。

是的 mysql_real_escape_string 实际上是只是逃避函数的字符串。它不是灵丹妙药。它将所做的一切是危险的转义字符,以便它们可以安全地使用单个查询字符串中。但是,如果你不做事先 sanitise 您的输入,然后您将容易受到一定的攻击媒介。

想象一下以下的 SQL:

$result ="SELECT fields FROM table WHERE id = ".mysql_real_escape_string($_POST['id']);

您应该能够看到这就是容易受到攻击。

想象一下 id 参数包含常见的攻击:

1 OR 1=1

没有危险的字符,在那里进行编码,所以它将直接通过逃逸的筛选器。离开我们:

SELECT fields FROM table WHERE id=1 OR 1=1

这是一个可爱的 SQL 注入向量和将使攻击者能够返回的所有行。或

1or is_admin=1 order by id limit 1

这会产生

SELECT fields FROM table WHERE id=1or is_admin=1 order by id limit 1

这使得攻击者能够在此完全虚构的示例返回第一个管理员的详细信息。

虽然这些函数是有用的他们必须小心使用。您需要确保所有 web 输入进行都验证,在某种程度上。在这种情况下,我们看到我们可以利用因为我们没有检查变量,我们正在使用的数字,是实际数字。在 PHP 中广泛应使用一组函数检查输入整数、 浮点数、 字母数字等。但是,SQL 时,听取预准备语句的最大价值。上面的代码是不安全的如果它是预准备的语句的数据库功能便会知道, 1 OR 1=1 不是有效的文本。

避免注入的方法:

 

2. 至于 htmlspecialchars()。这就是它自己的雷场。

有一个真正的问题在 PHP 中有一个整体的不同的 html 相关逃逸功能,并没有明确的指导,究竟哪些功能做什么选择。

首先,如果您是 HTML 标记内,你是在真正的麻烦。看

echo '';

我们已经内部 HTML 标记,所以我们不需要 < 或大于做任何危险的事情。我们的攻击可能只是javascript:alert(document.cookie)

现在生成 HTML 看起来就像

 
备注: html源码是:
你可能感兴趣的文章
maven安装环境配置
查看>>
关于CSS里BFC特性的理解和应用
查看>>
PHP 連結MySQL 常用函數
查看>>
Linux 安装操作
查看>>
lodash速览:对象Object方法(一)
查看>>
redis系列:哨兵
查看>>
TypeScript写的nodejs爬虫
查看>>
ajax实现下拉刷新+上拉加载
查看>>
前端每日实战:30# 视频演示如何用纯 CSS 创作一个晃动的公告板
查看>>
用户评测 | Docker管理面板系列——云帮(RainBond/CloudHelp 出色的k8s管理面板)
查看>>
用element-ui的走马灯carousel轻松实现自适应全屏banner图
查看>>
用ES6的class模仿Vue写一个双向绑定
查看>>
ECMAScript 6 学习之路 ( 七 )迭代器和 for-of 循环
查看>>
JavaScript函数式编程之pointfree与声明式编程
查看>>
angular4 实现模块懒加载
查看>>
优秀程序员的10个习惯
查看>>
mptosat,一个基于mpvue的toast弹窗组件
查看>>
【Scala之旅】特质与高级类型
查看>>
multipages-generator今日发布?!妈妈再也不用担心移动端h5网站搭建了!
查看>>
发布npm依赖包过程
查看>>